#include"threadPool.hpp"
#include<iostream>
#include"Task.hpp"
#include<ctime>
#include<cstdlib>
#include<unistd.h>

int main()
{
    srand((unsigned long)time(nullptr)^getpid());
    ThreadPool<Task>*tp =new ThreadPool<Task>();

    tp->run();

    while(true)
    {
        //生产的过程，制作任务的时候，要花时间
        int x =rand()%100+1;
        usleep(7721);
        int y=rand()%30+1;
        Task t(x,y,[](int x,int y)->int
        {
            return x+y;
        });

        //std::cout<<"制作任务完成："<<x<<"+"<<y<<"=?"<<std::endl;
        logMessage(DEBUG, "制作任务完成: %d+%d=?", x, y);
        //推送任务到线程池中
        tp->pushTask(t);

        sleep(1);
    }
    return 0;
}

//优化：方案2，在线程池中定义2个任务队列，2个队列指针(*c_queue,*p_queue)
//p_queue->生产一批任务之后，swap(p_queue,c_queue),唤醒所有/一个线程
//当消费者处理完毕的时候，也可以进行swap(p_queue,c_queue)
//因为我们生产和消费用的是不同的队列，未来我们要进行资源的处理的时候，仅仅是指针
